home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD 2.1 / Amiga Developer CD v2.1.iso / CD32 / XL_Toolkit_1.1 / Code / Pan.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-03-02  |  3.5 KB  |  114 lines

  1. /************************************************************************
  2. ***
  3. ***  Pan.h -- PAN file format used for multimedia sequencing
  4. ***
  5. ***  Created by: Carl Sassenrath & Ken Yeast, Pantaray, Inc., Jan 1991
  6. ***
  7. ***    1B20 Sassenrath        PIF_BYTEPLANES added
  8. ***    2303 Sassenrath/Yeast    PIF_CHUNKY/BYTE/LINE changed to handle
  9. ***                as many combinations as possible
  10. ***
  11. ************************************************************************/
  12.  
  13. #if ! defined( PAN_H )
  14. #define    PAN_H
  15.  
  16.  
  17. /***********************************************************************
  18. ***
  19. ***  Pan Head Structure
  20. ***
  21. ***    Minimum required for all types of PAN files, including
  22. ***    custom PAN files.
  23. ***
  24. ************************************************************************/
  25.  
  26. struct PanHead
  27. {
  28.     UBYTE    Type;            // PAN structure type
  29.     UBYTE    Info;            // PAN flags and other info
  30.     ULONG    Size;            // Frame size including PAN
  31. };
  32.  
  33. // Currently defined Types:
  34.  
  35. #define    PAN_CUSTOM    0        // For your custom data formats
  36. #define    PAN_STANDARD    1        // First standard format
  37. #define    PAN_SPECIAL    2        // Used for testing new ideas
  38.  
  39.  
  40. /************************************************************************
  41. ***
  42. ***  Pan Frame Structure
  43. ***
  44. ***    Standard frame structure used for most files.
  45. ***
  46. ************************************************************************/
  47.  
  48. struct PanFrame
  49. {
  50.     UBYTE    Type;            // Type = PAN_STANDARD
  51.     UBYTE    Info;            // PAN flags and other info (below)
  52.     ULONG    Size;            // Frame size including PAN
  53.     ULONG    Back;            // Bytes back to previous frame
  54.     ULONG    Frame;            // Frame sequence number
  55.     UWORD    XSize;            // Image width in pixels
  56.     UWORD    YSize;            // Image height in pixels
  57.     UBYTE    Reserved;        // Must be zero for now
  58.     UBYTE    PixelSize;        // Bits per pixel (depth)
  59.     UWORD    ColorMapSize;        // Size of color map in bytes
  60.     UWORD    AudioSize;        // Size of audio sample in bytes
  61.     UBYTE    PadBytes[8];        // Reserved for future
  62.  
  63. //    UWORD    ColorMap[]        // Color map  (variable size)
  64. //    UWORD    Video[];        // Video data (variable size)
  65. //    UWORD    Audio[];        // Audio data (variable size)
  66. };
  67.  
  68. typedef    struct PanFrame PAN;
  69.  
  70. #define    PAN_SIZE        sizeof( PAN )
  71.  
  72. // PanFrame.Info: Video Types
  73.  
  74. #define    PIV_MASK        0x0F    // Mask for video values:
  75. #define    PIV_STANDARD        0    // Normal RGB encoding
  76. #define    PIV_HAM            1    // Amiga HAM encoding
  77. #define    PIV_YUV            2    // YUV encoding
  78. #define    PIV_AVM            3    // AVM & DCTV encoding
  79. #define    PI_VIDEO( p )        ( (p)->Info & PIV_MASK )
  80.  
  81. // PanFrame.Info: Audio type
  82.  
  83. #define    PIA_MASK        0x10    // Mask for audio values:
  84. #define    PIA_MONO        0x00    // 1 channel sound
  85. #define    PIA_STEREO        0x10    // 2 channel sound
  86. #define    PI_AUDIO( p )        ( (p)->Info & PIA_MASK )
  87.  
  88. // PanFrame.Info: Pixel Value Orientation
  89.  
  90. #define    PIF_MASK        0xE0    // Mask for orientation values:
  91.  
  92. #define PIB_CHUNKY        5    // Pixel bits are in one "chunk"
  93.                     // PixelSize defines the # of bits
  94. #define    PIB_BITBYTE        6    // Clear for bit, set for byte
  95. #define    PIB_PLANELINE        7    // Clear for planes, set for lines
  96.  
  97. #define    PIF_PLANES        0x00    // Data is bit plane oriented
  98. #define    PIF_CHUNKY        0x20    // Data is chunky oriented
  99. #define    PIF_BYTE        0x40    // Data is byte plane oriented
  100. #define    PIF_LINES        0x80    // Data is line oriented
  101. #define    PIF_BYTELINES        0xC0    // Data is byte line oriented
  102. #define    PI_PIXEL( p )        ( (p)->Info & PIF_MASK )
  103.  
  104.  
  105. // Size macros
  106.  
  107. #define    ROW_SIZE( x )        ( ( ( (x) + 15 ) / 16 ) << 1 )
  108. #define    CMAP_SIZE( p )        ( (p)->ColorMapSize )
  109. #define    PLANE_SIZE( p )        ( ROW_SIZE( (p)->XSize ) * (p)->YSize )
  110. #define    IMAGE_SIZE( p )        ( PLANE_SIZE( p ) * (p)->PixelSize )
  111. #define    FRAME_SIZE( p )        ( PAN_SIZE + CMAP_SIZE( p ) + IMAGE_SIZE( p ) + (p)->AudioSize )
  112.  
  113. #endif
  114.